[이코테-구현]_왕실의 나이트


문제 설명

열(문자), 행(숫자)의 데이터를 받아 각 조건에 맞게 몇 번 움직일 수 있는지 맞추는 문제

움직일 수 있는 조건

  • 수직으로(위, 아래) 2번, 수평으로(좌, 우) 1번
  • 수직으로 1번(위, 아래), 수직으로(좌, 우) 2번

My Solution

position = input()
# 각 row, column 자리 지정
row = int(position[1])
col = int(ord(position[0])) - int(ord('a')) + 1
# 현 위치에서 움직일 수 있는 리스트
move_list = [(-1, -2), (-1, 2), (1, -2), (1, 2), (-2, -1), (-2, 1), (2, -1), (2, 1)]
count = 0

for move_lst in move_list:
    next_row = row + move_lst[1]
    next_col = col + move_lst[0]
	# 움직일 수 있는 판의 범위 체크
    if next_row >= 1 and next_col >= 1 and next_row <= 8 and next_col <= 8:
        count += 1

print(count)

문제 풀이

  • 입력 받은 데이터(position)를 행(row)와 열(col)의 변수로 나누어 할당하고, 움직일 수 있는 리스트 전체를 확인(탐색)해보았을 때, 판의 범위 안에 있다면 count를 해주는 풀이다.
  • 일단 입력 받은 데이터가 문자열로 입력 받기에 row는 추출하기 쉬웠으나, 열의 데이터는 문자로 입력을 받아 정수형으로 변환하는 과정이 필요했다. 따라서 특정 한 문자를 아스키 코드로 변환해 계산해 주었다.

    • ord : 특정 한 문자를 아스키 코드 값으로 변환, 'a' 문자는 97의 값을 가짐.
    • 좌표는 1부터 시작해야 되기 때문에 뒤에 +1를 추가해주었다. 만약 +1 연산을 안해준다면, 입력 값이 a일때 a(97) - a(97) = 0이 되므로

Hello, I'm@nickhealthy
개발자를 꿈꾸고, 파이썬과 클라우드에 관심이 많은 비전공자

Github